package Hilo;

import Socket.*;
import Servidor.*;

/**
* Clase para manejar cada una de las conexiones de los clientes 
*/
public class hilo extends Thread {

  private SocketBytes SocketDatos; // Socket de comunicacion
  private Servidor sd1;
  private int id; // identificador de cliente conectado
  private String nombre;
  //private int numpreg;
  private String preg0;
  private int resp0;
  private String preg1;
  private int resp1;  
  private int max;
  private int timer;
  private int c;
  boolean acabar = false;
  /*
  * Constructor que recibe Socket de comunicacion y objeto servidor para actualizar numero de conexiones
  */

  
  public hilo(SocketBytes socketDatos2, Servidor copyOfServidor,int n,int cont) {
	   try {
		   
		      // miembros para comunicacion por sockets
		      SocketDatos = socketDatos2;
		      sd1 =copyOfServidor;
		      max=n;
		      
		      //Tiempo que van a esperar para ver la siguiente pregunta
		      timer = 5000;
		      
		      preg0 ="¿Cual fue el profesor del anio,\n" +
		      		"segun la revista TIMES,\n" +
		      		"en no dar un palo al agua?\n\n" +
					"1) Patricio Garcia.\n" +
					"2) Jose Luis Glez Avila.\n" +
					"3) Marcos Colebrook.\n";
		      
		      resp0=2;
		      
		      preg1 ="¿Quien fue el ganador del\n" +
		      		"Oscar a la mejor interpretacion\n" +
		      		"en el anio 2010?\n\n" +
					"1) Patry Potter.\n" +
					"2) Jedi Torres.\n" +
					"3) Kiko Eastwood.\n";
		      
		      resp1=1;
		      

		      id = ((Integer) SocketDatos.recibeMensaje()).intValue();
		      nombre = ((String) SocketDatos.recibeMensaje());
		      
		      c=cont;
	          sd1.jugadores[cont].ID = cont;
	          sd1.jugadores[cont].Name = nombre;
	          
		      sd1.luzVerde(cont);
		      sd1.escribirMensaje("El jugador "+nombre+" se ha unido a la partida.\n");
		      
		    } catch (Exception e) // Imprimir cualquier excepciï¿½n
		    { System.err.println(e); }
}

  public void Ganador(){
	  	acabar= true;
	  	int ganador = -1;	 
	  	String gano = "Ni "+sd1.jugadores[1].Name +" ni "+sd1.jugadores[2].Name+ "\n Incurtos!";

		 if (sd1.acerto[0] == sd1.acerto[1])
			 ganador = sd1.acerto[0]; 
		 else if (sd1.acerto[0] != -99999 && sd1.acerto[1] == -99999)
			 ganador = sd1.acerto[0];
		 else if (sd1.acerto[1] != -99999 && sd1.acerto[0] == -99999)
			 ganador = sd1.acerto[1];
		 
		 
		 if (ganador != -1){			 
			 if (ganador == sd1.jugadores[1].ID)
				 gano = sd1.jugadores[1].Name;
			 else if (ganador == sd1.jugadores[2].ID)
				 gano = sd1.jugadores[2].Name;
			 else 
				 gano = "Empate.";
		 }
		 	  
		 sd1.escribirMensajeNuevo("*******************************************************************************************\n\n\n\n" +
		  						   "                                   And the Winner is: "+gano +"!!!\n\n\n\n\n" +
		  						   "*******************************************************************************************");
	 
		 }
	  
  
public void run() {
    
    int dato;

    try {
      while (acabar == false) {
	  
 
        if(sd1.contestacionespregunta0 == 0){
            try {  
            	sd1.esperopreg0++;
            	
            	if (sd1.esperopreg0 == max)
            		sd1.escribirMensajeNuevo(preg0);
            	
            	SocketDatos.enviaMensaje(preg0);
          
            	dato = ((Integer) SocketDatos.recibeMensaje()).intValue(); 
   
            } catch (Exception e) { 
            	System.err.println(e);
            	break;
            }

            if (dato == 0)
            	acabar = true;
            else{       	
            	if (dato == resp0 &&  sd1.acertadapregunta0 == false){
            		sd1.acertadapregunta0 = true;
            		sd1.escribirMensaje("Jugador " + nombre +  " ha acertado\n");
            		sd1.escribirMensaje("La respuesta correcta era: "+resp0+"\n"); 
            		sd1.acerto[0]=c;
            		
            	}
            	else if (sd1.acertadapregunta0 == false)
            		sd1.escribirMensaje("Jugador " + nombre +  " ha fallado.\n");
            	else 
            		sd1.escribirMensaje("Jugador " + nombre +  " contesto tarde.\n");
            	sd1.contestacionespregunta0 ++;
            	
            }
            if (sd1.acertadapregunta0 == false && sd1.contestacionespregunta0 == max)
            	sd1.escribirMensaje("Ningun jugador acerto. La respuesta correcta era "+resp0+"\n");
           
        
            //if(sd1.contestacionespregunta0 == max)
            	//sleep(timer);
            
        }
               
        
        if(sd1.contestacionespregunta0 == max && sd1.contestacionespregunta1 == 0){
            try {  
            	sleep(timer);
            	sd1.esperopreg1++;
            	if (sd1.esperopreg1 == max)
            		sd1.escribirMensajeNuevo(preg1);
            	
            	SocketDatos.enviaMensaje(preg1);
          
            	dato = ((Integer) SocketDatos.recibeMensaje()).intValue(); 
   
            } catch (Exception e) { 
            	System.err.println(e);
            	break;
            }

            if (dato == 0)
            	acabar = true;
            else{          	
            	if (dato == resp1 &&  sd1.acertadapregunta1 == false){
            		sd1.acertadapregunta1 = true;
            		sd1.escribirMensaje("Jugador " + nombre +  " ha acertado\n");
            		sd1.escribirMensaje("La respuesta correcta era: "+resp1+"\n"); 
            		sd1.acerto[1]=c;
            		
            	}
            	else if (sd1.acertadapregunta1 == false)
            		sd1.escribirMensaje("Jugador " + nombre +  " ha fallado.\n");
            	else 
            		sd1.escribirMensaje("Jugador " + nombre +  " contesto tarde.\n");
            	sd1.contestacionespregunta1 ++;
            	
            }
            if (sd1.acertadapregunta1 == false && sd1.contestacionespregunta1 == max)
            	sd1.escribirMensaje("Ningun jugador acerto. La respuesta correcta era "+resp1+"\n");   
            
            //if(sd1.contestacionespregunta1 == max)
            	//sleep(timer);
        }
        
        
        if(sd1.contestacionespregunta1 == max){
        	sleep(timer);
        	if (acabar==false)
        		Ganador();
        	acabar= true;

        }         
        
        /*if(sd1.contestacionespregunta1 == max && acabar == false){
        	acabar= true;
        	Ganador();
        } */ 	
        
      } // while ...
      
      SocketDatos.enviaMensaje("Gracias por participar");
      //SocketDatos.close();

      synchronized (sd1) {
        sd1.notify();
      }
    } catch (Exception e) // Imprimir cualquier excepciï¿½n
    { System.err.println(e); }
  } // run
} // hilo